package com.cdz.common.utils;

import com.alibaba.fastjson2.JSON;
import com.github.pagehelper.util.StringUtil;
import org.apache.poi.ss.formula.functions.T;

import java.util.*;

/**
 * @Description: List 工具类
 * @Author: guyi
 * @Date: 2022/8/1 17:10
 */
public class ListUtils {

    /**
     *
     * strToList(将字符串按 "," 分割，组成list返回)
     *
     * @Title: strToList
     * @param @param str 如果str为""或者null，返回长度为0的list
     * @param @return    设定文件
     * @return List<String>    返回类型
     * @throws
     */
    public static List<String> strToList(String str){
        return strToList(str, ",");
    }

    public static List<String> split(String str){
        return strToList(str, "\\|");
    }

    public static List<String> splitLatLng(String str){
        return strToList(str, "\\_");
    }

    /**
     *
     * isEmpty(判断是否为空)
     *
     * @Title: isEmpty
     * @param @param list
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isEmpty(Collection<?> list){
        return !isNotEmpty(list);
    }

    /**
     *
     * isEmpty(判断是否为空)
     *
     * @Title: isEmpty
     * @param @param arr
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isEmpty(Object[] arr){
        return !isNotEmpty(arr);
    }

    /**
     *
     * isNotEmpty(判断是否不为空)
     *
     * @Title: isNotEmpty
     * @param @param list
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isNotEmpty(Collection<?> list){
        if(list!=null && list.size()>0)
            return true;
        else
            return false;
    }

    public static boolean isNotEmpty(Map<?, ?> map){
        if(map!=null && map.size()>0)
            return true;
        else
            return false;
    }

    public static boolean isEmpty(Map<?, ?> map){
        return !isNotEmpty(map);
    }

    /**
     *
     * isNotEmpty(判断是否不为空)
     *
     * @Title: isNotEmpty
     * @param @param arr
     * @param @return    设定文件
     * @return boolean    返回类型
     * @throws
     */
    public static boolean isNotEmpty(Object[] arr){
        if(arr!=null && arr.length>0)
            return true;
        else
            return false;
    }

    /**
     *
     * strToList(将字符串按 regex 分割，组成list返回)
     *
     * @Title: strToList
     * @param @param str 如果str为""或者null，返回长度为0的list
     * @param @param regex 正则表达式
     * @param @return    设定文件
     * @return List<String>    返回类型
     * @throws
     */
    static List<String> strToList(String str, String regex){
        List<String> list = new ArrayList<String>();

        if(StringUtil.isEmpty(str)){
            return list;
        }

        String[] strArr = str.split(regex);

        for(String eachStr : strArr){
            list.add(eachStr);
        }

        return list;
    }


    /**
     *
     * listToStr(将String的list以joinChar连接)
     *
     * @Title: listToStr
     * @param @param list
     * @param @param joinChar
     * @param @return    设定文件
     * @return String    返回类型
     * @throws
     */
    public static String listToStr(List<String> list, String joinChar){
        if(isEmpty(list) || joinChar == null){
            return "";
        }

        String listStr = "";

        for(String item : list){
            listStr = listStr+item+joinChar;
        }

        listStr = listStr.substring(0, listStr.length()- joinChar.length());

        return listStr;

    }


    /**
     * 根据key的set返回key的list
     *
     * @param set
     * @return
     */
    public static List<String> getKeyListBySet(Set<String> set) {
        List<String> keyList = new ArrayList<String>();
        keyList.addAll(set);
        return keyList;
    }


    /**
     * 获取两个list之间相同的值
     * @param list1
     * @param list2
     * @return
     */
    public static List<String> getEqualValue(List<String> list1, List<String> list2) {
        Map<String,Integer> map = new HashMap<String,Integer>();
        for (String  str : list1) {
            map.put(str, 1);
        }
        for (String  str : list2) {
            Integer x = map.get(str);
            if(x!=null) {
                map.put(str, ++x);
                continue;
            }
            map.put(str, 11);
        }
        List<String> list3 = new ArrayList<String>();
        for (String str : map.keySet()) {
            if(map.get(str)==2) {
                list3.add(str);
            }
        }
        return list3;
    }


    /**
     * List 转换
     * @param list
     * @param entityClass
     * @param <T>
     * @return
     */
    public static <T> List<T> convertList(Object list,Class<T> entityClass) {
        return JSON.parseArray(JSON.toJSONString(list), entityClass);
    }

    /**
     * 对list集合进行手动分页
     * @param pageNum
     * @param pageSize
     * @param list
     * @return
     */
    public static List<T> listPage(int pageNum, int pageSize, List list){
        int size = list.size();
        if (pageSize > size) {
            pageSize = size;
        }
        if (pageSize != 0) {
            int MaxPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;
            if (pageNum > MaxPage) {
                return new ArrayList<>();
            }
        }
        int curldx = pageNum > 1 ? (pageNum - 1) * pageSize : 0;
        ArrayList pageList = new ArrayList();
        for (int i = 0; i < pageSize && curldx + i < size; i++) {
            pageList.add(list.get(curldx + i));
        }

        return pageList;
    }
}
